///Author: Guangfu Wang
///Date: 2021-09-13

#ifndef INVERSE_GRAPH_HPP

#include <Eigen/Core>

#include "../def.hpp"

namespace gf {
    /**
     * 
     * @brief this class is used for generating an inverse of specified graph.
     * @note input will be an adjacency matrix.
     * @note output will be inverse of adjacency matrix.
     * @note this class is designed not inheritable.
     * 
     **/
    class Inverse_Graph final {
    private:
        SQUARE_MATRIX_DIM dims_;
        unsigned int num_verts_;
        unsigned int num_edge_;
        unsigned int num_face_;

        Eigen::Matrix<unsigned int, Eigen::Dynamic, Eigen::Dynamic> E1_;
        Eigen::Matrix<unsigned int, Eigen::Dynamic, Eigen::Dynamic> E2_;
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
    };
};

#endif //INVERSE_GRAPH_HPP
